package com.maple.callback.event.base;

import java.util.HashSet;
import java.util.Set;

/**
 * 
 * 描述:作者事件源
 *
 * @author maple
 * @date 2017年9月29日 下午2:26:12
 */
public class Writer {
	private String name;
	
	private String lastArticle;
	//作者类要包含一个自己监听器的列表
	private Set<WriterListener> writerListeners = new HashSet<>();
	
	public Writer(String name) {
		this.name = name;
	}
	
	//作者发布新小说了，要通知所有关注自己的读者
    public void addNovel(String novel) {
        System.out.println(name + "发布了新书《" + novel + "》！");
        lastArticle = novel;
        fireEvent();
    }
    //触发发布新书的事件，通知所有监听这件事的监听器
    private void fireEvent(){
        WriterEvent writerEvent = new WriterEvent(this);
        for (WriterListener writerListener : writerListeners) {
            writerListener.addArticle(writerEvent);
        }
    }
    //提供给外部注册成为自己的监听器的方法
    public void registerListener(WriterListener writerListener){
    	writerListeners.add(writerListener);
    }
    //提供给外部注销的方法
    public void unregisterListener(WriterListener writerListener){
    	writerListeners.remove(writerListener);
    }

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getLastArticle() {
		return lastArticle;
	}

	public void setLastArticle(String lastArticle) {
		this.lastArticle = lastArticle;
	}
    
    
	
	
	
	
	
	
	
	
	
	
}
